Yeah, it's a quirk of the language. Because of the (weird) order that C/C++ evaluates and assigns type values, the "Test t1();" statement is interpreted as a call, not a declaration.

It's just one of those "gotchas" that one learns of (sometimes several times) over the years.